package cn.zkrt.aims;

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.junit.Test;


import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class JunitDemo {

    @Test
    public void testMethod() {
        String rtspUrl = "rtsp://admin:admin123456@192.168.60.41:554/cam/realmonitor?channel=38&subtype=1"; // 替换为实际的RTSP URL
        String outputImagePath = "first_frame.jpg"; // 保存的图像文件路径
        FFmpegFrameGrabber grabber = null;
        try {
            // 创建FFmpegFrameGrabber对象
            grabber = new FFmpegFrameGrabber(rtspUrl);
            // 设置使用TCP方式连接（可选，但推荐以避免丢包）
            grabber.setOption("rtsp_transport", "tcp");
            // 开始捕获视频流
            grabber.start();

            // 捕获第一帧
            Frame frame = grabber.grabImage(); // 注意：grabImage()可能直接返回第一帧，但也可能需要多次调用以确保非空
            if (frame != null) {
                // 将Frame转换为BufferedImage
                Java2DFrameConverter converter = new Java2DFrameConverter();
                BufferedImage image = converter.getBufferedImage(frame);

                // 保存图像到文件
                File outputFile = new File(outputImagePath);
                ImageIO.write(image, "jpg", outputFile);
                System.out.println("第一帧图像已保存至：" + outputImagePath);
            } else {
                System.out.println("未捕获到第一帧图像");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 停止捕获并释放资源
            if (grabber != null) {
                try {
                    grabber.stop();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
